package com.arpa.ntocc.common.common.validator.annotation;

import com.arpa.ntocc.common.common.validator.aspect.PartyGroupNameExistValidator;

import javax.validation.Constraint;
import java.lang.annotation.*;

/**
 * 组织名称校验注解
 * @author liuxr
 * @date 2021/11/13 11:10
 */

@Documented
@Constraint(validatedBy = PartyGroupNameExistValidator.class)
/*
 * 指定注解运用的地方:
 *      ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
 *      ElementType.CONSTRUCTOR 可以给构造方法进行注解
 *      ElementType.FIELD 可以给属性进行注解
 *      ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
 *      ElementType.METHOD 可以给方法进行注解
 *      ElementType.PACKAGE 可以给一个包进行注解
 *      ElementType.PARAMETER 可以给一个方法内的参数进行注解
 *      ElementType.TYPE 可以给一个类型进行注解，比如类、接口、枚举
 */
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.PARAMETER,ElementType.TYPE})
/*
  指明生命周期:
       RetentionPolicy.SOURCE 注解只在源码阶段保留，在编译器进行编译时它将被丢弃忽视。
       RetentionPolicy.CLASS 注解只被保留到编译进行的时候，它并不会被加载到 JVM 中。
       RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候，它会被加载进入到 JVM 中，所以在程序运行时可以获取到它们。
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface PartyGroupNameExistConstraint {
    String message() default "组织名称已存在";
    Class[] groups() default {};
    Class[] payload() default {};
}
